home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1995 April / Internet Tools.iso / mail / listserv / utils / use_From:_address.sh.Z / use_From:_address.sh
Encoding:
Text File  |  1993-05-31  |  2.0 KB  |  77 lines

  1. echo x - README
  2. sed 's/^X//' >README <<'*-*-END-of-README-*-*'
  3. XContents:
  4. X
  5. XREADME        - this file
  6. XCatmail        - use in place of catmail in your aliases file (e.g.
  7. X          listserv:    "|/usr/server/Catmail -r -f")
  8. X          Should be owned by root; change paths as necessary
  9. Xaddress.c    - used by Catmail; no special compilation options; should be
  10. X          executable by root
  11. *-*-END-of-README-*-*
  12. echo x - Catmail
  13. sed 's/^X//' >Catmail <<'*-*-END-of-Catmail-*-*'
  14. X#! /bin/sh
  15. Xno_address=0
  16. Xcat > /tmp/In.Mail.$$
  17. Xchown server /tmp/In.Mail.$$
  18. X/usr/server/address "`grep '^From: ' /tmp/In.Mail.$$`" > /tmp/Mail.$$
  19. X#grep '^From: ' /usr/server/In.Mail.$$ | awk '{ printf "From " $2 " "; exit }' > /usr/server/Mail.$$
  20. Xif [ $? -gt 0 ]; then
  21. X  no_address=1
  22. Xfi
  23. Xdate >> /tmp/Mail.$$
  24. Xcat /tmp/In.Mail.$$ >> /tmp/Mail.$$
  25. Xif [ $no_address -gt 0 ]; then
  26. X  MANAGER=`grep "^manager " /usr/server/config | awk '{ print $2 }'`
  27. X  cat /tmp/Mail.$$ | /bin/rmail $MANAGER
  28. Xelse
  29. X  cat /tmp/Mail.$$ | /usr/server/catmail $*
  30. Xfi
  31. Xrm /tmp/In.Mail.$$ /tmp/Mail.$$
  32. *-*-END-of-Catmail-*-*
  33. echo x - address.c
  34. sed 's/^X//' >address.c <<'*-*-END-of-address.c-*-*'
  35. X#include <stdio.h>
  36. X#include <ctype.h>
  37. X#include <string.h>
  38. X
  39. X#define EOS    '\0'
  40. X#define FROM    "From: "
  41. X
  42. X/*
  43. X  Given an RFC 822 From: line address, strip comments etc. and extract
  44. X  the actual address.
  45. X*/
  46. X
  47. Xvoid extract_address (char *s)
  48. X{
  49. X  char *p;
  50. X
  51. X  if (p = strchr (s, '<'))
  52. X    sprintf (s, "%s", p + 1); /* Remove '<' */
  53. X  if (*s == '|' || *s == ':')
  54. X    *s = EOS;  /* Protect against trojans */
  55. X  if (p = strchr (s, '>'))
  56. X    *p = EOS;  /* Remove '>' */
  57. X  if (p = strchr (s, '('))
  58. X    *p = EOS; /* Remove comments */
  59. X  else {  /* Get to the end of the address */
  60. X    while (*s != EOS && !isspace (*s))
  61. X      ++s;
  62. X    *s = EOS;
  63. X  }
  64. X}
  65. X
  66. Xmain (int argc, char **argv)
  67. X{
  68. X  if (argc < 2 || strncmp (argv[1], FROM, strlen (FROM)))
  69. X    exit (1);
  70. X  sprintf (argv[1], "%s", argv[1] + strlen (FROM));
  71. X  extract_address (argv[1]);
  72. X  printf ("From %s ", argv[1]);
  73. X  exit (0);
  74. X}
  75. *-*-END-of-address.c-*-*
  76. exit
  77.